from django.shortcuts import render

# Create your views here.
from django.core.paginator import Paginator, EmptyPage
from django.views import View
from django.http import JsonResponse

from .models import SKU
from .utils import get_breadcrumb

#商品列表页
class ListView(View):
    def get(self, request, category_id):
        #获取参数
        page = request.GET.get('page')
        page_size = request.GET.get('page_size')
        ordering = request.GET.get('ordering')
        # 2、校验参数
        # 3、业务数据处理 —— 根据分类过滤sku商品，排序分页返回
        # 3.1、过滤加排序
        #判断category_id是否正确
        skus = SKU.objects.filter(
            category_id=category_id
        ).order_by(ordering)
        #分页
        #获取页器对象
        # Paginator：第一个参数是被分页的查询集；第二个参数是每页几个划分
        paginator = Paginator(skus, page_size)
        try:
            # (2)、找对象的方法获取所需的页数据
            page_skus = paginator.page(page)
        except EmptyPage as e:
            return JsonResponse({
                'code': 400,
                'errmsg': '页面不存在'
            })
        #构建响应
        #定义列表
        data_list = []
        #整理格式
        for sku in page_skus:
            data_list.append({
                'id': sku.id,
                'default_image_url': sku.default_image.url,
                'name': sku.name,
                'price': sku.price
            })
        #分页器对象中属性num_pages,总页数
        total_page = paginator.num_pages
        breadcrumb = get_breadcrumb(category_id)

        #把数据变为json发送给前端
        return JsonResponse({
            'code': 0,
            'errmsg': 'ok',
            'breadcrumb': breadcrumb,  #面包屑导航
            'list': data_list,
            'count': total_page
        })


#商品热销排行
class HotGoodsView(View):
    def get(self, request, category_id):
        #根据销量倒序
        # 1、提取参数
        # 2、校验参数
        # 3、业务数据处理 —— 按照销量排序取前2

        skus = SKU.objects.filter(
            category_id=category_id,
            is_launched=True   #已上架
        ).order_by('-sales')
        #取销量前２
        hot_skus_queryset = skus[:2]
        #转换格式
        hot_skus = []
        for sku in hot_skus_queryset:
            hot_skus.append({
                'id': sku.id,
                'default_image_url': sku.default_image.url,
                'name': sku.name,
                'price': sku.price
            })
        return JsonResponse({
            'code': 0,
            'errmsg': 'OK',
            'hot_skus': hot_skus
        })

# from haystack.views import SearchView
# # 搜索sku商品
# class MySearchView(SearchView):
#     # 该视图中默认已经提供了一个get方法响应GET请求，并且已经实现了根据q参数检索数据
#     # 构建响应 —— 重写该函数构建一个JsonResponse响应
#     def create_response(self):
#         # 1、获取ES搜索的结果
#         context = self.get_context()
#         # object_list是一个列表，保存了Haystack查询的结果Result对象
#         results = context['page'].object_list
#         data_list = []
#         # 2、构建指定的响应参数
#         for result in results:
#             # 每一个Result对象
#             # result.object属性就是查询出来是SKU模型类对象
#             sku = result.object
#             data_list.append({
#                 'id': sku.id,
#                 'name': sku.name,
#                 'price': sku.price,
#                 'default_image_url': sku.default_image.url,
#                 # 用户搜索的关键词
#                 'searchkey': context.get('query'),
#                 # 页面总页数
#                 'page_size': context['page'].paginator.num_pages,
#                 # 查询的总数量
#                 'count': context['page'].paginator.count
#             })
#
#         # 3、构建一个JsonResponse响应返回
#         return JsonResponse(data_list, safe=False)